class Solution {
    static class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }
    public ListNode reverseEvenLengthGroups(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        int n = 1;
        while(cur != null) {
            int k = 0;
            ListNode tmp = pre;
            while(k < n && cur!= null) {
                pre = cur;
                cur = cur.next;
                k++;
            }

            if(k % 2 == 0) {
                ListNode tmpNext = tmp.next;
                pre = reverse(tmp.next,pre);
                tmp.next = pre;
                tmpNext.next = cur;
            }
            n++;
        }
        return head;
    }
    public ListNode reverse(ListNode cur, ListNode pre) {
        ListNode ret = null;
        while(cur != pre) {
            ListNode curNext = cur.next;
            cur.next = ret;
            ret = cur;
            cur = curNext;
        }
        pre.next = ret;
        return pre;
    }
}
public class help {
    public static void main(String[] args) {
        Solution solution = new Solution();
        Solution.ListNode listNode = new Solution.ListNode(1);
        listNode.next = new Solution.ListNode(1);
        listNode.next.next = new Solution.ListNode(0);
        listNode.next.next.next = new Solution.ListNode(6);
        listNode.next.next.next.next = new Solution.ListNode(5);
        listNode.next.next.next.next.next = null;
//        listNode.next.next.next.next.next = new Solution.ListNode(1);
//        listNode.next.next.next.next.next.next = new Solution.ListNode(7);
//        listNode.next.next.next.next.next.next.next = new Solution.ListNode(3);
//        listNode.next.next.next.next.next.next.next.next = new Solution.ListNode(8);
//        listNode.next.next.next.next.next.next.next.next.next = new Solution.ListNode(4);
//        listNode.next.next.next.next.next.next.next.next.next.next = null;
        solution.reverseEvenLengthGroups(listNode);

    }
}
